package com.xunk.equipment.mapper;

import com.xunk.equipment.domain.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 设备Mapper接口
 *
 * @author dongxiaoxin
 * @date 2021-03-17
 */
public interface EquipmentMapper {

    /**
     * 获取设备信息
     *
     * @param deviceSn 设备id
     * @return
     */
    EquipmentDO getEquipment(@Param("deviceSn") String deviceSn);

    /**
     * 插入设备信息
     *
     * @param equipmentDO 设备信息
     */
    void insertEquipment(EquipmentDO equipmentDO);

    /**
     * 删除设备
     *
     * @param deviceSn 设备id
     */
    void deleteEquipment(@Param("deviceSn") String deviceSn, @Param("parentSn") String parentSn);

    /**
     * 更新设备在线信息
     *
     * @param deviceSn     设备id
     * @param deviceOnline 设备是否在线
     */
    void updateEquipmentOnline(@Param("deviceSn") String deviceSn, @Param("deviceOnline") Long deviceOnline);

    /**
     * 更新网关设备在线信息，同时更新呢网关子设备在线信息
     *
     * @param deviceSn     网关设备id
     * @param deviceOnline 设备是否在线
     */
    void updateGatewayOnline(@Param("deviceSn") String deviceSn, @Param("deviceOnline") Long deviceOnline);

    /**
     * 根据设备id获取对应的homeId
     *
     * @param deviceSn 设备id
     * @return
     */
    Long selectHomeIdByDeviceSn(@Param("deviceSn") String deviceSn);

    /**
     * 获取家庭下的设备列表
     *
     * @param deptId       设备id
     * @param deviceSource 家庭设备还是机电设备
     * @return
     */
    List<EquipmentDO> listEquipments(@Param("deptId") Long deptId, @Param("deviceSource") Integer deviceSource);

    /**
     * 获取网关下的设备列表
     *
     * @param parentSn 网关设备id
     * @return
     */
    List<EquipmentDO> listGatewayEquipments(@Param("parentSn") String parentSn);

    void insertDeviceControlLog(DeviceControlLog log);

    /**
     * 查询设备在线状态
     *
     * @param deviceSn 设备id
     * @return 是否在线
     */
    String selectOnlineByDeviceSn(@Param("deviceSn") String deviceSn);

    /**
     * 更改设备的昵称
     *
     * @param deviceSn 设备id
     * @param name     设备昵称
     */
    void updateDeviceNickname(@Param("deviceSn") String deviceSn, @Param("name") String name);

    /**
     * 根据厂商查询设备列表
     *
     * @param supplier 厂商
     * @return
     */
    List<EquipmentDO> selectDeviceBySupplier(@Param("supplier") String supplier);

    List<EquipmentDO> selectGatewayBySupplier(@Param("supplier") String supplier);

    List<AlarmParamDO> selectAlarmInfo(@Param("deviceSn") String deviceSn);

    void updateArming(@Param("deviceSn") String deviceSn, @Param("value") Integer value);

    Boolean getArmingStateByDeviceSn(@Param("deviceSn") String deviceSn);

    EquipmentBaseInfoDO getDeviceBaseInfo(@Param("specModel") String specModel, @Param("supplierCode") String supplierCode);

    EquipmentBaseInfoDO getDeviceBaseInfoById(@Param("id") Long id);

    List<Long> selectUsersByDeviceSn(@Param("deviceSn") String deviceSn);

    /**
     * 根据厂商和家庭查询设备id列表
     *
     * @param supplier
     * @param deptId
     * @return
     */
    List<String> selectDeviceSnBySupplierAndDeptId(@Param("supplier") String supplier, @Param("deptId") Long deptId);

    /**
     *
     * @param supplier
     * @return
     */
    List<Map> selectDeviceSnAndDeptIdBySupplier(@Param("supplier") String supplier);
}
